package com.wit.witmg.service.impl;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wit.witmg.entity.TSite;
import com.wit.witmg.entity.TStock;
import com.wit.witmg.mapper.TStockMapper;
import com.wit.witmg.service.ITStockService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wit.witmg.util.ErrorCode;
import com.wit.witmg.util.JsonResult;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author bob
 * @since 2024-12-09
 */
@Service
public class TStockServiceImpl extends ServiceImpl<TStockMapper, TStock> implements ITStockService {

    @Override
    public Object add(HttpServletRequest request, String json) {
        TStock t= JSON.parseObject(json,TStock.class);
        if(t.getId()>0){
            boolean bl=  updateById(t);
            if(!bl){
                return JsonResult.error(ErrorCode.ERR_200);
            }
        }else{
            t.setDate(new Date());
            boolean bl= save(t);
            if(!bl){
                return JsonResult.error(ErrorCode.ERR_504);
            }
        }
        return JsonResult.success(t);
    }

    @Override
    public Object get(HttpServletRequest request, String cid, String pid) {
        QueryWrapper<TStock> qw=new QueryWrapper<>();
        if(cid!=null && !cid.isEmpty()){//参数：cid,查询获取cid等于参数的所有数据（该公司参股的公司），把其中pid为空的那条作为一级对象，添加children属性，把其它的按rs从大到小排序成数组作为parent的值。
            qw.eq("cid",cid);
            qw.orderByDesc("rs");
            TStock entP=new TStock();
            List<TStock> all = list(qw);
            List<TStock> rootNodes = new ArrayList<>();
            for (TStock node : all) {
                if (node.getPid() == null || node.getPid().isEmpty()) {
                    entP=node;
                }else{
                    rootNodes.add(node);
                }
            }
            entP.setChildren(rootNodes);
//            entP.setChildren(list(new QueryWrapper<TStock>().eq("pid",cid).orderByDesc("rs")));
            return JsonResult.success(entP);
        }else if(pid!=null && !pid.isEmpty()){//pid,查询获取cid等于参数的且pid为空的那条作为一级对象；添加children属性，查询获取pid等于参数的所有数据（该公司所有股东）按rs从大到小排序放入。备注：因为公司之间会交叉持股，所以只查询一级数据避免形成死循环。
            QueryWrapper<TStock> qwF=new QueryWrapper<>();
            qwF.eq("cid",pid);
            qwF.eq("pid","");
            qwF.last("limit 1");
            TStock entP=getOne(qwF);
            if(entP==null) return JsonResult.error(ErrorCode.ERR_200);
            qw.eq("pid",pid);
            qw.orderByDesc("rs");
            entP.setChildren(list(qw));
            return JsonResult.success(entP);
        }else{
            return JsonResult.error(ErrorCode.ERR_200);
        }

    }

    @Override
    public Object del(HttpServletRequest request, Integer id) {
        boolean bl= removeById(id);
        if(bl) {
//            remove(new QueryWrapper<TStock>().eq("pid",id));
            return JsonResult.success();
        }
        return JsonResult.error(ErrorCode.ERR_200);
    }
}
